1.3 語長と演算精度
PDMとDRAMでは最小のアクセス単位は 1語=64bitである。
命令種別ごとにアラインメント制約があるため常にアドレスをこの単位で指定できるわけではない。
L2B以下は1長語=64bitのアクセス単位を基本とする。
PEでは一部1単語=32bit単位および4単語=長語=128bitでのアクセスが可能である。
PE命令の演算においては整数・浮動小数点数ともに以下の3種類がサポートされる。
半語(半精度): 16bit
単語(単精度): 32bit
長語(倍精度): 64bit
例えばPEで長語アクセスした値に対してALUで半精度演算を行った場合、 1 長語に含まれる 4 半語に対してSIMD演算が実行される。
整数は符号なしと符号ありがある。
浮動小数点数フォーマットの各部ビット数はそれぞれ以下である。
半精度:符号1bit、指数部6bit、仮数部9bit
単精度:符号1bit、指数部8bit、仮数部23bit
倍精度:符号1bit、指数部11bit、仮数部52bit
浮動小数点数は正規化数、正負のゼロ、正負の無限大のみからなり、非正規化数とNaNは存在しない。
整数には− 0 はないが浮動小数点数にはあることに注意する。
仮数部にはけち表現を用いる。
例えば、半精度の1.0はビット列としては0x3e00である。
4*3=12bitでは?wogikaze.icon
浮動点小数なにもわからない
倍精度値1語は、長語64ビットのMSBからLSBに向かって、符号ビット、指数部の上位ビットから下位ビット、仮数部の上位ビットから下位ビットの順に格納される。
/icons2/blue1.icon*1/icons2/red1.icon*11/icons2/green1.icon*52
単精度値2語は、長語64ビットのMSB側とLSB側それぞれ32ビットについて、同様の順に格納される。
/icons2/blue1.icon*1/icons2/red1.icon*8/icons2/green1.icon*23/icons2/blue1.icon*1/icons2/red1.icon*8/icons2/green1.icon*23
半精度値4語は、長語64ビットのMSB側から16ビットずつ、同様の順に格納される。
/icons2/blue1.icon*1/icons2/red1.icon*6/icons2/green1.icon*9/icons2/blue1.icon*1/icons2/red1.icon*6/icons2/green1.icon*9/icons2/blue1.icon*1/icons2/red1.icon*6/icons2/green1.icon*9/icons2/blue1.icon*1/icons2/red1.icon*6/icons2/green1.icon*9
これらは2長語128ビット内の単精度値4語や整数値についても同様である。
PEで単語アクセスした際は、単語アドレスの下側(偶数側)が長語アクセスのMSB側、上側(奇数側)が長語アクセスのLSB側となる。
行列ベクトル積演算を行う場合には事前にブロックフロート化という変換を行っておく必要があり、ブロックフロート化浮動小数点数は上で述べたものとは異なるフォーマットになる*^5 。
具体的には、各部ビット数は通常の浮動小数点数と同じであるが、仮数部にはけち表現を用いない。
*^5 MN-Coreではブロックフロートを用いるのは半精度のみだったが、MN-Core 2では全精度で用いる